package com.song.springcloud.controller;

import com.song.springcloud.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;

import java.util.List;


@Controller
public class UserConsumerController {

    // 理解：消费者，不应该有servcie层,直接从远程获取服务
    // RestTemplate ... 供我们直接调用就好了，注册到spring中
    // (url,实体：Map,Class<T> responseType 响应的类型)

    @Autowired
    private RestTemplate restTemplate; //提供多重便捷访问远程http服务的方法，简单的Restful服务模板

    // 使用Ribbon负载均衡，这里的地址，应该就是一个变量，通过服务名来访问，不需要ip+port
    // 访问客户端时，接口通过服务名去多个注册中心（集训）中随机访问一个可用的Eureka服务器进行通信，获取提供者提供的服务，实现负载均衡和高可用
    // 无法确定当前访问的是集群中的哪个注册中心
    //private static final String REST_URL_PREFIX = "http://192.168.52.49:8001";
    private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-USER";


    //http://localhost:80/consumer/user/get/201722
    @RequestMapping("/consumer/user/get/{id}")
    @ResponseBody
    public User get(@PathVariable("id") Long id) {
        System.out.println("进入了"+id);
        return restTemplate.getForObject(REST_URL_PREFIX + "/user/get/" + id, User.class);
    }

    //http://localhost:80/consumer/user/list
    @RequestMapping("/consumer/user/list")
    @ResponseBody
    public List<User> list() {
        System.out.println("进入了");
        return restTemplate.getForObject(REST_URL_PREFIX + "/user/list", List.class);
    }

    //http://localhost:80/consumer/user/add
    @RequestMapping("/consumer/user/add")
    @ResponseBody
    public Boolean add(User user) {
        System.out.println("进入了");
        return restTemplate.postForObject(REST_URL_PREFIX + "/user/add", user, Boolean.class);
    }


}
